#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>

int main(int argc, char const *argv[])
{

    printf("main进程(id:%d)开始执行 \n", getpid());

    // 创建一个子进程
    /*
        fork内部
        1. 创建子进程，拷贝父进程的内存空间作为子进程的内存空间(代码，数据，堆，栈)
        2. 选择执行父进程， 返回子进程的pid
        3. 选择执行子进程， 返回0

        程序计数器：pc (program counter) 存储当前执行的位置
        pc = 19
    */
    int value = 100;
    pid_t pid = fork();
    printf("fork之后 \n");

    if (pid == 0)
    {
        value--;
        printf("子进程(id:%d)开始执行,父进程(id:%d),value=%d,value的地址=%p  \n", getpid(), getppid(), value, &value);
    }
    else if (pid > 0)
    {
        value++;
        printf("父进程(id:%d)开始执行,子进程(id:%d),value=%d,value的地址=%p  \n", getpid(), pid, value, &value);
    }
    else
    { // 创建失败
        printf("创建子进程失败\n");
        return -1;
    }

    printf("main进程(%d)执行结束 \n", getpid());

    return 0;
}
